<?php

include ('autoloading_classes.include.php');
if ( in_array( strtolower( ini_get( 'magic_quotes_gpc' ) ), array( '1', 'on' ) ) )
{
    $_POST = array_map( 'stripslashes', $_POST );
    $_GET = array_map( 'stripslashes', $_GET );
    $_COOKIE = array_map( 'stripslashes', $_COOKIE );
}
/**
 * Description of HTMLElementsManager
 *
 * \author Gianmarco Nalin
 * \date 24/01/2013
 */
class HTMLElementsManager extends Manager {
    
    //! Query per recuperare un elemento HTML dato il suo nome.
    const GET_ELEMENT_BY_NAME = "SELECT * FROM html WHERE name = :name;";
    
    //! Query per salvare un nuovo elemento HTML.
    const SAVE_ELEMENT = "INSERT INTO html (name, content, year) VALUES (:name, :content, :content);";
    
    //! Query per eliminare un elemento HTML.
    const DELETE_ELEMENT = "DELETE FROM html WHERE name = :name;";
    
    //! Query per aggiornare un elemento HTML.
    const UPDATE_ELEMENT = "UPDATE html SET content = :content, year = :year WHERE name = :name;";
    
    //! Metodo per recuperare un elemento HTML.
    /*!
     * \param name Nome dell'elemento HTML che si vuole recuperare.
     * \return Un oggetto HTMLElement se l'elemento esiste, null altrimenti.
     */
    public function get_HTML_element_by_name($name) {
        $stmt = $this->connection->prepare(self::GET_ELEMENT_BY_NAME);
        $stmt->execute(array('name' => $name));
        $element = null;
        if ($e = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $element = new HTMLElement();
            foreach ($e as $key => $value) {
                $element->{$key} = $value;
            }
        }
        
        return $element;
    }
    
    //! Metodo per salvare un nuovo elemento HTML.
    /*!
     * \param element Oggetto HTMLElement che rappresenta il nuovo elemento.
     * \return TRUE se il salvataggio è andato a buon fine, FALSE altrimenti.
     */
    public function save_HTML_element($element) {
        $stmt = $this->connection->prepare(self::SAVE_ELEMENT);
        $stmt->execute(array(
            'name' => $element->name,
            'content' => $element->content,
            'year' => $element->year
        ));
        
        return $stmt->rowCount() > 0;
    }
    
    //! Metodo per eliminare un elemento HTML.
    /*!
     * \param name Nome dell'elemento HTML da eliminare.
     * \return TRUE se l'eliminazione è andata a buon fine, FALSE altrimenti.
     */
    public function delete_HTML_element($name) {
        $stmt = $this->connection->prepare(self::DELETE_ELEMENT);
        $stmt->execute(array('name' => $name));
        
        return $stmt->rowCount() > 0;
    }
    
    //! Metodo per aggiornare un elemento HTML.
    /*!
     * \param element Oggetto HTMLElement che contiene gli aggiornamenti dell'elemento.
     * \return TRUE se l'eliminazione è andata a buon fine, FALSE altrimenti.
     */
    public function update_HTML_element($element) {
        $stmt = $this->connection->prepare(self::UPDATE_ELEMENT);
        $stmt->execute(array(
            'name' => $element->name,
            'content' => $element->content,
            'year' => $element->year
        ));
        
        return $stmt->rowCount();
    }
}
?>
